package com.itheima.test02;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/*
题目2（加强训练）

需求：定义一个Student类，用反射去创建一个Student对象，要求使用两种方式：

1. 通过Class对象的方法创建。
2. 通过Constructor对象的方法创建。

 */
public class Test {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        Class<?> aClass = Class.forName("com.itheima.test02.Student");
        //通过Constructor创建对象
        Constructor<?> constructor = aClass.getConstructor(String.class, int.class, boolean.class, double.class);
        constructor.setAccessible(true);
        Object stu1 = constructor.newInstance("张三", 23, true, 75.5);
        System.out.println("通过Constructor创建对象" + stu1);
        //通过方法创建对象
        Constructor<?> constructor1 = aClass.getConstructor();
        Object stu2 = constructor1.newInstance();
        Method setName = aClass.getMethod("setName", String.class);
        Method setAge = aClass.getMethod("setAge", int.class);
        Method setGender = aClass.getMethod("setGender", boolean.class);
        Method setScore = aClass.getMethod("setScore", double.class);
        setName.invoke(stu2,"李四");
        setAge.invoke(stu2,24);
        setGender.invoke(stu2,false);
        setScore.invoke(stu2,88.9);
        System.out.println("通过方法创建对象" + stu2);

    }
}
